/*
 * Copyright 2009-2012 Evun Technology. 
 * 
 * This software is the confidential and proprietary information of
 * Evun Technology. ("Confidential Information").  You shall not
 * disclose such Confidential Information and shall use it only in
 * accordance with the terms of the license agreement you entered into
 * with evun.cn.
 */
package com.imis.demo.springboot.config;

import java.util.Map;

import org.springframework.beans.BeansException;
import org.springframework.context.ApplicationContext;
import org.springframework.context.ApplicationContextAware;
import org.springframework.stereotype.Service;

/**
 *
 *
 * @author  WeiFei.Shu
 * @since 2018年7月19日 下午3:02:50
 *   
 */
@Service
public class SpringContextHolder implements ApplicationContextAware {
	private static ApplicationContext applicationContext;
	/**
	 * @author wf.shu
	 * @since 2017年10月16日 下午4:06:41
	 * @param applicationContext 上下文内容
	 * @throws BeansException Bean异常信息
	 * @see org.springframework.context.ApplicationContextAware#setApplicationContext(org.springframework.context.ApplicationContext)
	*/

	@Override
	public void setApplicationContext(ApplicationContext applicationContext) throws BeansException {
		SpringContextHolder.applicationContext = applicationContext;
	}
	/**
	 * 返回ApplicationContext值
	 * 
	 * @author wf.shu
	 * @since 2017年10月16日 下午4:09:25
	 * @return 上下文内容
	 */
	public static ApplicationContext getApplicationContext() {  
        return applicationContext;  
    }  
	
	/**
	 * 通过BeanName获取Bean
	 * 
	 * @author wf.shu
	 * @since 2017年10月16日 下午4:10:46
	 * @param beanName Bean名称
	 * @return 对象实例
	 */
	
    public static Object getBean(String beanName) {  
        return applicationContext.getBean(beanName);  
    }  
     /**
      * 通过Class类型获取Bean
      * 
      * @author wf.shu
      * @since 2017年10月16日 下午4:10:26
      * @param clazz Class名称
      * @return 对象实例
      */
     
    public static <T> T getBean(Class<T> clazz) {
        return applicationContext.getBean(clazz);  
    }
    /**
     * 通过类型获取对应的Bean数组
     * 
     * @author wf.shu
     * @since 2017年10月16日 下午4:10:07
     * @param clazz Class名称
     * @param T 类型
     * @return 对象实例
     */
    public static <T> Map<String, T> getBeanOfType(Class<T> clazz){
    	return applicationContext.getBeansOfType(clazz);
    }

}
